home *** CD-ROM | disk | FTP | other *** search
/ PD Collection CD 1 / PD Collection CD 1.iso / data / powerbas / Docs / Calculate < prev    next >
Text File  |  1995-08-21  |  11KB  |  246 lines

  1. Ch 6 − Performing Calculations
  2.  
  3. There are two mechanisms for performing calculations in Powerbase:− 
  4.  
  5. •       Self-calculating fields which automatically calculate and display a
  6. value derived from other fields.   
  7.  
  8. •       Arithmetic performed on a column in a report. 
  9.  
  10. Self-calculating fields are those which are of Calculated or Composite
  11. types. Calculated fields display a numeric result derived from other fields
  12. in the record. When the mouse pointer is moved over such a field it changes
  13. into a shape resembling a pocket calculator. Composite fields perform a
  14. similar function but display a textual result instead of a number. In this
  15. case the mouse pointer changes into a large “+” sign. The latter do not,
  16. strictly, involve “calculations” at all but because Composite and Calculated
  17. fields work in the same way it is convenient to deal with them together. It
  18. isn’t possible to type data directly into either of these special types of
  19. field.
  20.  
  21. It is also possible to write your own functions in Basic and use them in
  22. Calculated and Composite fields. The system variable TIME$ is useful in this
  23. connection. 
  24.  
  25. 6.1  Calculated fields
  26.  
  27. 6.1.1 Simple calculations using Numeric fields
  28.  
  29. Our first example will be to make a field containing a v.a.t. exclusive
  30. price determine the contents of another field which includes v.a.t. at 17%. 
  31. Let the tags of these fields be VEX and VINC respectively. Click MENU over
  32. the VINC to bring up the Field submenu and move right over  Calculations. 
  33. You will see a window with a writable icon which contains:−
  34.  
  35. VINC=
  36.  
  37. Complete the formula so that it reads:−
  38.  
  39. VINC=VEX*1.17
  40.  
  41. and click on OK or type Return. From now on the value in VINC will change
  42. whenever you type something in VEX.  Since the v.a.t. rate is liable to
  43. change it would be better to place the current percentage rate in another
  44. Numeric field called VAT and make the formula attached to VINC read:−
  45.  
  46. VINC=VEX+(VEX*VAT/100)
  47.  
  48. The second example calculates the average of four fields No1, No2, No3 and
  49. No4, placing the result in a Calculated field AVGE.  The required formula
  50. is:−
  51.  
  52. AVGE=(No1+No2+No3+No4)/4 
  53.  
  54. 6.1.2 Making calculations retrospective
  55.  
  56. The default setting is such that entering or altering a formula affects only
  57. those records added or altered after the formula entry/change. The changes
  58. can be made retrospective by selecting the Recalculate existing records
  59. switch on the formula entry window. On clicking OK you will be asked to
  60. confirm that you want previous records to be made consistent with the
  61. formula you have just entered. Changes affect the current subfile only, but
  62. can be easily implemented in other subfiles by changing to the required
  63. subfile, calling up the formula entry window, selecting the option button
  64. and clicking OK. 
  65.  
  66. 6.1.3 Calculations using non-numeric fields (!)
  67.  
  68. You might think that the process described is only applicable to numeric
  69. fields, but a non-numeric field may be specified in the formula − if it is
  70. linked to a validation table. To be of use there must be  numeric data in
  71. the column of the validation table immediately following the one to which
  72. the field is linked (see 5.2). Suppose, for example, we have fields in a
  73. student record for A-level exam grades, the field tags being GR1, GR2, GR3,
  74. GR4. The grades are non-numeric but they map onto the numeric points system
  75. which universities use to control entry. 
  76.  
  77. The relationship of grades to points is as follows:−
  78.  
  79.                                     Grade   Points    
  80.  
  81.                         A       10   
  82.  
  83.                         B        8    
  84.  
  85.                         C        6    
  86.  
  87.                         D        4     
  88.  
  89.                         E        2 
  90.  
  91. A validation table could be set up with the grades in column 0 and the
  92. equivalent points in column 1. Each of fields GR1−GR4 would be linked to
  93. column 0 thus restricting input to the capital letters A-E. A further field
  94. of Calculated type would be created to hold the points score. If we
  95. associate this field (PTS) with the formula:−
  96.  
  97. PTS=A1+A2+A3+A4. 
  98.  
  99. entering or changing the letter grades in A1-A5 will cause the points score
  100. to be updated.
  101.  
  102. 6.1.4 Calculations involving times
  103.  
  104. There is a field type, Time, which will only accept valid 24-hour times in
  105. hh:mm:ss format.  If the tag of such a field is included in a calculation
  106. formula it will be converted into seconds and the result used in the
  107. calculation. Thus a Calculated field DIFF could use two Time fields, TIM1
  108. and TIM2, in the formula:−
  109.  
  110. DIFF=TIM1-TIM2
  111.  
  112. and Powerbase would keep DIFF updated to show the difference in seconds
  113. between the two times. 
  114.  
  115. 6.2  Composite fields
  116.  
  117. To enter the formula for a Composite field follow the same procedure as for
  118. a Calculated field. Note that the relevant entry on the Field submenu now
  119. says Combine fields. Formula entry is similar to that for Calculated fields
  120. except that only string operations are allowed. The one most frequently used
  121. will be “+” which allows fields to be joined together.  Suppose your
  122. database contains fields for surname (SNAM) and forename (FNAM) and you want
  123. to be able to print names in the format forename-surname. Define a Composite
  124. field called NAME and attach to it the formula:−
  125.  
  126. NAME=FNAM+“ ”+SNAM
  127.  
  128. Note the quoted space separating the names.  You might want the NAME field
  129. to show only an initial plus the surname, in which case the formula would
  130. be:−
  131.  
  132. NAME=LEFT$(FNAM,1)+“. ”+SNAM
  133.  
  134. Composite fields, like Calculated fields, may be used in conjunction with
  135. Time fields to perform genuine “clock arithmetic”. Referring to the example
  136. in 6.1.4, if we attached the formula to a Composite field instead of a
  137. Calculated one it would show the difference in hours, minutes and seconds.
  138. The method can be extended to jobs like averaging times, e.g. with a formula
  139. such as:−
  140.  
  141. AVE=(TIM1+TIM2+TIM3)/3
  142.  
  143. As with Calculated fields updating occurs after editing a field whose tag
  144. appears in the attached formula. Thus NAME would be updated after changes to
  145. FNAM or SNAM and DIFF after changes to TIM1 or TIM2. You can, however, have
  146. Composite fields which make use of the Basic system variable TIME$. Thus a
  147. field DAY could be linked to the formula:−
  148.  
  149. DAY=LEFT$(TIME$,3) 
  150.  
  151. to make it show Mon, Tue etc. No field tags are referred to in the formula
  152. so DAY gets updated immediately before displaying the record so that the
  153. information is correct at that time. 
  154.  
  155. 6.3  User functions
  156.  
  157. These are functions, written in Basic, which accept field tags as parameters
  158. and can be included in the calculation formulae of self-calculating fields.
  159. All such functions must return only their principal value − RETURN variables
  160. in the parameter list aren’t allowed. The name of each function must begin
  161. with an upper-case “U”, e.g. FNUaverage. This is to avoid duplication of
  162. function-names which are part of Powerbase. 
  163.  
  164. All the user functions to be used by a database must be included in a Basic
  165. program called UserFuncs which is stored in the database directory (not in
  166. the Powerbase directory). When the database is opened UserFuncs will be
  167. loaded as a library and Powerbase can call the user functions just as
  168. readily as on its own functions. 
  169.  
  170. The distribution disc includes a UserFuncs file containing two examples of
  171. user functions kindly submitted by David Lenthall. Users are invited to
  172. submit other user functions for possible inclusion in the function library.
  173. FNUnow (which takes no parameters) operates on the value of TIME$ from the
  174. real-time clock and returns a string containing the current date in form
  175. DD-MM-YY. A record design could include a field of Composite type, at least
  176. eight characters long and tagged as, for example, DATE. Associating the
  177. field with the formula:−
  178.  
  179. DATE=FNUnow 
  180.  
  181. would cause the field to display the current date at all times. 
  182.  
  183. The second function, FNUageinyrs accepts two parameters, each of which
  184. should be the tag of a field which holds a date in DD-MM-YY format, and
  185. returns the difference between the dates to the nearest year. The first date
  186. should be the earlier of the two. If your record design has a field for Date
  187. of Birth (let’s call its tag DOB) you can use this function together with
  188. FNUnow to make a Composite field (AGE) display a person’s age in years by
  189. using the formula:− 
  190.  
  191. AGE=FNUageinyrs(DOB,FNUnow) 
  192.  
  193. Considerable care is needed in constructing user functions as it is very
  194. easy to make Powerbase generate errors. In particular you must avoid giving
  195. a function a name which is the same as a field tag − or even one which
  196. contains a field tag as a substring. The two functions described could not,
  197. for instance, be used in a database which had a field tagged as “now” or
  198. “age”, although “NOW” and “AGE” could be used. 
  199.  
  200. Calculated and Composite fields are normally updated when changes are made
  201. to the fields whose tags appear in their calculation formulae. If a formula
  202. contains a user function then the field will be updated after changes to
  203. those fields whose tags appear in the parameter list of the function. 
  204.  
  205. The previous discussion of Composite fields pointed out that they are
  206. updated after altering fields whose tags appear in the calculation formula
  207. or, in the case of those using TIME$, immediately before display. There is a
  208. problem as a user functions may use TIME$ without it appearing in the
  209. parameter list of the function  (FNUnow is an example of this). The field
  210. AGE in the example given will only be updated when DOB is edited. It will
  211. therefore show the age at the time you enter his/her date of birth but won’t
  212. automatically change it a year later. To make the change automatic you could
  213. introduce TIME$ as a parameter in FNUnow, i.e. make it FNUnow(TIME$) even
  214. though the function doesn’t need it. When Powerbase sees TIME$ in the
  215. formula it will update AGE. The same trick of using TIME$ as a dummy
  216. parameter can be used for any user function associated with a field which
  217. you want updating without having to edit the record, but note that the
  218. record must be displayed for updating to occur. See 14.5.3 for a method of
  219. ensuring that all records in the current subfile are updated on opening the
  220. database.
  221.  
  222. 6.4  Calculations on a column of a report
  223.  
  224. There is an option on the Print submenu called Numeric fields which is
  225. normally shaded. It only becomes available when you highlight one or more
  226. Numeric or Calculated fields for printing. You can then access a window
  227. listing all the fields (if any) in the record which are of these two types.
  228. Associated with each field are six check-boxes which can be selected to 
  229. include the following in the report:− 
  230.  
  231.                         Count                         
  232.  
  233.                         Sum                         
  234.  
  235.                         Average                         
  236.  
  237.                         Standard deviation                         
  238.  
  239.                         Maximum                         
  240.  
  241.                         Minimum 
  242.  
  243. The check-boxes are shaded until a field is included in a print selection.
  244. They then become “live” and any or all of them may be chosen by clicking
  245. with SELECT. The information requested is then added to the report footer
  246. when printing takes place.